Flowable 协同办公模块使用

一、业务介绍

pigx-flow 模块通过整合 flowable 完成简单的流程发起、审批、拒绝等操作。实现类似于企业微信、钉钉等企业常见的简易审批工作流。

通过改进后的动态表单设计器,用户可以轻松创建和编辑动态表单,支持自定义字段和验证规则。而流程设计器则提供了直观的拖放界面,使得审批流使用体验类似于企业微信或钉钉。我们相信这些改进将极大地提升用户的工作效率和体验。

二、快速开始

2.1 创建分组

流程分组用于组织和管理不同类型的工作流,建议按业务模块或部门划分。

操作步骤:流程管理 > 创建分组

2.2 创建流程

创建流程包含三个步骤:基础信息配置、表单设计、流程设计。

2.2.1 基础信息配置

必填字段

字段名说明要求
图标流程的图标,在流程列表中显示必填,上传图片
名称流程的显示名称必填,2-10个字符
分组流程所属的分组必填,从已创建的分组中选择
管理员流程的管理员,可以管理和维护该流程必填,选择一名用户

可选字段

字段名说明要求
流程ID流程的唯一标识符可选,填写必须和自定义表单流程的KEY一致 (Flowable 自定义业务表单)
备注流程的说明信息可选,2-20个字符

2.2.2 表单设计

表单设计支持两种模式:

方式一:动态表单(推荐)

使用可视化表单设计器,通过拖拽组件快速构建表单。

业务组件(专为工作流设计):

  • 人员:选择用户
  • 部门:选择部门
  • 上传:上传文件附件
  • 图片:上传图片
  • 地区:选择省市区
  • 签名:手写签名
  • 字典:从数据字典中选择
  • 流水号:自动生成编号

基础组件

  • 输入框、多行输入框、密码输入框
  • 计数器(数字输入)
  • 单选框、多选框、选择器
  • 开关、评分
  • 时间、时间区间
  • 滑块

设计器特性

  • 拖拽式操作,所见即所得
  • 支持字段验证规则
  • 支持字段联动和条件显示
  • 实时预览表单效果
方式二:自定义表单

适用于复杂业务场景,使用自定义Vue页面作为表单。 参考 Flowable 自定义业务表单

2.2.3 流程设计

在流程设计器中,通过可视化方式设计审批流程。

设计器功能

  • 缩放控制:支持50%-300%缩放
  • 拖拽添加节点
  • 实时流程预览
  • 节点配置面板

可添加的节点类型

节点类型说明
审批人需要审批的节点,可配置多种审批方式
抄送人通知节点,相关人员可查看但不需要审批
条件分支根据条件判断流程走向
并行分支多个分支同时执行

流程设计要点

  • 每个流程必须有"发起人"节点(自动创建)
  • 至少需要一个审批节点
  • 条件分支必须配置判断条件
  • 所有分支最终必须汇聚

三、流程节点配置详解

3.1 发起人节点配置

发起人节点是流程的起始节点,配置哪些人可以发起该流程以及发起人对表单的权限。

3.1.1 设置发起人

配置选项

  • 所有人:默认选项,组织内所有用户都可以发起
  • 指定成员:只有特定用户可以发起
  • 指定部门:特定部门的成员可以发起
  • 指定角色:拥有特定角色的用户可以发起

使用场景

  • 所有人:请假申请、报销申请等通用流程
  • 指定成员:仅特定人员可以发起的流程(如月度报告提交)
  • 指定部门:部门专用流程(如销售部的客户拜访申请)
  • 指定角色:角色相关流程(如项目经理才能发起项目立项)

3.1.2 表单权限

设置发起人对表单各个字段的访问权限。

权限级别

权限说明使用场景
可写发起人可以查看和编辑字段默认权限,适用于大部分字段
只读发起人只能查看,不能修改系统自动填充的字段(如流水号、创建时间)
隐藏发起人不可见该字段内部使用字段,发起人不需要知道

最佳实践

  • 发起人填写的字段通常设为"可写"
  • 系统自动生成的字段设为"只读"
  • 仅供审批人使用的字段设为"隐藏"

3.2 审批人节点配置

审批人节点是流程的核心,支持多种灵活的审批方式。

3.2.1 审批人设置方式

支持7种审批人指定方式:

1. 指定成员

直接指定具体的用户作为审批人,支持选择多个用户。

使用场景

  • 固定审批人的流程(如报销必须由财务经理审批)
  • 特定岗位审批(如合同必须由法务审批)

示例

  • "财务报销" 指定财务经理张三
  • "合同审批" 指定法务部李四和王五
2. 部门主管

默认情况下:由发起人所在部门的主管审批。(如果流程节点设置了指定主管,则由对应人审批)

使用场景

  • 部门内部审批流程

配置方法

  1. 系统管理 > 岗位管理 > 添加岗位 > 创建"部门主管"岗位(岗位编码:TEAM_LEADER)
  2. 系统管理 > 用户管理 > 为对应用户分配部门主管岗位
3. 角色

指定拥有某个角色的所有用户作为审批人。

使用场景

  • 基于职能的审批(如所有审计员都可以审批审计申请)
  • 轮值审批(角色下的任何人都可以审批)

示例

  • "质量检查" 由所有质检角色人员审批
  • "安全审查" 由所有安全员角色人员审批
4. 发起人自选

流程发起时,由发起人自己选择审批人。

使用场景

  • 灵活的审批流程
  • 发起人最了解应该由谁审批的场景

示例

  • "项目立项" 允许发起人选择项目负责人审批
  • "专项申请" 发起人选择相关领导审批
5. 发起人自己

由发起人自己审批(用于特殊场景)。

使用场景

  • 自助服务流程
  • 最终确认环节
  • 备案类流程

示例

  • "信息登记" 发起人填写后自己确认
  • "知识分享" 发起人提交后自己发布
6. 流程表达式

使用动态表达式根据业务逻辑确定审批人。

配置格式${beanName.methodName(execution)}

注意:需要开发支持,开发人员需要实现对应的Spring Bean方法。 详细参考 Flowable 自定义表达式

7. 表单人员

使用表单中的"人员"字段作为审批人。

使用场景

  • 审批人在表单中指定
  • 动态的审批人选择

示例

  • "项目申请" 由表单中填写的"项目负责人"审批
  • "采购申请" 由表单中选择的"部门负责人"审批

注意:表单中必须有"人员"类型的组件。

3.2.2 多人审批模式

当审批人设置方式匹配到多个用户时(如指定成员选择了多人、角色下有多个用户等),需要配置多人审批模式。

审批模式说明审批规则使用场景
会签所有人都必须审批通过全部同意才通过,任一人拒绝则拒绝重要决策需要所有相关人员一致同意(如重大采购、重要合同)
或签任意一人审批通过即可任一人同意即通过,全部拒绝才拒绝多个备选审批人,任一人审批即可(如多个经理都可以审批请假)
依次审批按顺序逐个审批按指定顺序依次审批,前一人通过后下一人才能审批有明确审批顺序的流程(如初审→复审→终审)

最佳实践

  • 会签:适用于需要多方共同决策的场景,如跨部门协作、重大投资决策
  • 或签:适用于多个同等权限的审批人,提高审批效率
  • 依次审批:适用于有审批层级的流程,确保审批顺序

3.2.3 审批人为空时处理

当审批人设置方式未能匹配到任何用户时(如部门没有主管、角色下没有用户等),系统需要知道如何处理。

处理方式说明使用场景
自动通过跳过该审批节点,自动流转到下一节点非必要的审批环节,审批人缺失时可以跳过
自动拒绝自动拒绝该流程申请严格的审批流程,必须有审批人才能通过
自动结束直接结束流程,不再继续流转特殊情况下需要终止流程的场景
转交给管理员转交给流程管理员处理需要人工介入判断的场景
指定人员转交给预先指定的备用审批人有明确备用审批人的场景

最佳实践

  • 推荐使用"转交给管理员"或"指定人员",避免流程卡住
  • 严格流程使用"自动拒绝"
  • 确保组织架构完整,减少审批人为空的情况

3.2.4 审批拒绝处理

当审批人拒绝申请时,可以配置拒绝后的处理方式。

处理方式说明流程状态使用场景
直接结束流程拒绝后流程立即终止流程结束,状态为"已拒绝"严格的审批流程,一旦拒绝即失败
驳回到指定节点退回到之前的某个节点,可以修改后重新提交流程回退到指定节点,可以重新流转允许修改后重新审批的流程
驳回到指定节点

配置选项

  • 可以选择当前节点之前的任何审批节点
  • 退回后从该节点重新开始流转
  • 支持退回给发起人或其他审批节点

常见场景

  1. 退回给发起人:信息填写有误,需要发起人修改
    • 示例:报销单金额填写错误,退回修改
  2. 退回到上一级审批:上一级审批有误,需要重新审批
    • 示例:部门主管拒绝后,退回到小组长重新审批
  3. 退回到特定节点:某个环节有问题,需要从该环节重新审批
    • 示例:财务审批发现采购流程有问题,退回到采购审批重新确认

最佳实践

  • 常规业务流程建议使用"驳回到指定节点",增加流程灵活性
  • 严格流程(如资质认证、合规审查)使用"直接结束流程"
  • 明确告知用户拒绝原因,可以在审批意见中说明

3.2.5 表单权限配置

对于动态表单,可以为审批人配置每个字段的访问权限。

权限级别

权限说明审批人操作使用场景
可写审批人可以查看和修改字段可以修改字段内容审批人需要补充或修正信息
只读审批人只能查看,不能修改只能查看,不可编辑供审批人参考的字段
隐藏审批人不可见该字段完全不可见与该审批人无关的敏感字段

最佳实践

  • 只读:大部分字段建议设为只读,供审批人查看但不修改
    • 示例:请假天数、报销金额等关键信息
  • 可写:审批人需要补充的字段
    • 示例:审批意见、审批备注、审批金额调整
  • 隐藏:敏感字段或与审批人无关的字段
    • 示例:其他部门的内部备注、个人隐私信息

配置界面: 表单权限以矩阵形式展示,每个字段可以选择"只读"、"可写"或"隐藏"。

3.2.6 事件通知配置

配置审批完成后的事件通知,实现与外部系统的集成。

配置项

  • 通知URL:填写接收通知的Webhook地址

通知时机

  • 审批通过后
  • 审批拒绝后

通知方式

  • POST请求,发送JSON格式数据到指定URL

通知内容

  • 流程ID(flowId)
  • 流程实例ID(processInstanceId)
  • 表单数据(data)
  • 节点ID(nodeId)
  • 审批人ID(userId)
  • 任务ID(taskId)
  • 审批意见(approveDesc)
  • 节点名称(nodeName)
  • 更多字段详见"进阶使用 > 节点任务通知"章节

使用场景

  • 与ERP系统集成:审批通过后自动创建订单
  • 与CRM系统集成:合同审批通过后自动同步到CRM
  • 发送通知:审批完成后发送邮件、短信、企业微信通知
  • 触发其他业务流程:审批完成后触发下一个业务流程

3.3 抄送人节点配置

抄送人节点用于通知相关人员查看流程,抄送人不需要审批,只有查看权限。

3.3.1 抄送人设置

配置选项

  • 指定成员:选择具体的用户作为抄送人
  • 指定部门:选择部门,该部门所有成员都会收到抄送
  • 指定角色:选择角色,拥有该角色的用户都会收到抄送

使用场景

  • 知会相关领导或部门
  • 信息同步给相关团队
  • 备案和存档

示例

  • "请假流程" 抄送给HR部门备案
  • "报销流程" 抄送给财务部门存档
  • "项目立项" 抄送给相关部门负责人

3.3.2 表单权限

设置抄送人对表单字段的访问权限。

权限级别

  • 只读(推荐):抄送人只能查看表单内容
  • 隐藏:对抄送人隐藏敏感字段

注意

  • 抄送人不支持"可写"权限,因为抄送人不应该修改表单
  • 默认所有字段为"只读"

最佳实践

  • 一般情况下,抄送人可以查看所有字段
  • 敏感信息(如薪资、绩效)可以对无关抄送人隐藏

3.4 条件分支配置

条件分支用于根据表单数据或业务规则,将流程导向不同的审批路径。

3.4.1 条件设置方式

支持两种条件配置方式:

方式一:条件组方式(推荐)

基于表单字段和运算符构建条件,支持可视化配置,无需编码。

支持的字段类型和运算符

字段类型支持的运算符说明
人员/部门属于、不属于判断是否属于指定的人员或部门
文本字段等于、不等于、包含、不包含文本匹配判断
数字字段==, !=, >, >=, <, <=数值比较
日期字段==, !=, >, >=, <, <=日期比较
单选字段等于、不等于选项值匹配

条件组合

  • 支持多个条件组合
  • 条件之间可以使用"且"(AND)或"或"(OR)逻辑
  • 支持嵌套的条件组

配置示例

场景1:报销金额审批

  • 条件分支1:报销金额 <= 5000 → 部门经理审批
  • 条件分支2:报销金额 > 5000 且 报销金额 <= 20000 → 财务经理审批
  • 条件分支3:报销金额 > 20000 → 财务总监审批
  • 其他条件:默认走管理员审批

场景2:请假天数审批

  • 条件分支1:请假天数 <= 3 → 直接主管审批
  • 条件分支2:请假天数 > 3 且 请假天数 <= 10 → 部门经理审批
  • 条件分支3:请假天数 > 10 → HR总监审批

场景3:复合条件审批

  • 条件分支1:请假天数 > 3 且 请假类型 = "年假" → 部门经理审批
  • 条件分支2:请假类型 = "病假" 或 请假类型 = "事假" → 直接主管审批
  • 其他条件:默认审批流程
方式二:表达式方式

使用流程表达式动态判断,适用于复杂业务逻辑。

配置格式${beanName.methodName(execution)}

使用场景

  • 需要查询数据库或第三方系统的复杂判断
  • 涉及多个表单字段的复杂计算
  • 需要调用业务规则引擎的场景

注意:需要开发支持,开发人员需要实现对应的Spring Bean方法。详细参考 Flowable 自定义表达式

3.4.2 多条件分支

分支配置规则

  1. 可以添加多个条件分支(建议不超过10个)
  2. 条件按优先级从上到下判断
  3. 满足第一个条件后,进入对应的分支,不再判断后续条件
  4. 最后一个分支为"其他条件"(默认分支),作为兜底

分支优先级调整

  • 使用上下箭头调整分支顺序
  • 将最常见的条件放在前面,提高判断效率
  • 将覆盖范围广的条件放在后面

示例配置顺序

优先级1: 报销金额 > 50000 → 总经理审批 优先级2: 报销金额 > 20000 → 财务总监审批 优先级3: 报销金额 > 5000 → 财务经理审批 优先级4: 其他条件(金额 <= 5000) → 部门经理审批

3.4.3 条件判断说明

判断流程

  1. 流程执行到条件分支节点时,从第一个分支开始判断
  2. 依次检查每个分支的条件是否满足
  3. 一旦找到满足条件的分支,进入该分支执行,停止后续条件判断
  4. 如果所有条件都不满足,进入"其他条件"分支

最佳实践

  • 确保条件互斥,避免歧义
  • 将最常见的条件放在前面
  • 必须配置"其他条件"分支作为兜底
  • 测试所有分支的条件逻辑

注意事项

  • 条件分支至少需要2个分支(包括"其他条件")
  • 每个分支的条件必须配置完整
  • 条件判断区分大小写(文本字段)
  • 数字和日期比较时注意数据类型匹配

3.5 并行分支配置

并行分支用于多个审批路径同时执行,提高审批效率。

3.5.1 并行分支说明

特点

  • 多个分支同时并行执行
  • 不需要配置条件判断
  • 所有分支完成后才继续后续流程

与条件分支的区别

特性条件分支并行分支
执行方式根据条件只执行一个分支所有分支同时执行
条件配置需要配置判断条件不需要配置条件
完成条件选中的分支完成即可所有分支都必须完成
使用场景互斥的审批路径并行的审批任务

3.5.2 使用场景

场景1:多部门并行审批

  • 采购申请需要财务部和行政部同时审批
  • 项目立项需要技术部、市场部、财务部并行审批

场景2:多项任务并行执行

  • 员工入职需要同时办理:IT设备申请、人事手续、财务账号开通
  • 项目启动需要同时:合同签署、资源分配、环境准备

场景3:提高审批效率

  • 重要决策需要多个领导并行审批,而非依次审批
  • 多个独立的审批任务可以并行进行

配置示例

采购流程并行审批

发起人提交采购申请 ↓ 并行分支 { 分支1: 财务部审批(预算审核) 分支2: 行政部审批(资质审核) 分支3: 技术部审批(技术评估) } ↓ (所有分支完成后汇聚) 总经理终审 ↓ 流程结束

四、流程操作

4.1 发起流程

在流程列表中选择需要发起的流程,填写表单后提交。

操作步骤

  1. 进入"协同办公"或"流程中心"
  2. 选择对应的流程分组
  3. 点击要发起的流程
  4. 填写表单(必填字段需要填写完整)
  5. 点击"提交"发起流程

注意事项

  • 确保必填字段已填写
  • 上传的附件不要超过系统限制
  • 提交前仔细检查填写的信息
  • 提交后可以在"发起历史"中查看流程进度

4.2 处理待办

在待办列表中查看并处理待审批的流程。

操作步骤

  1. 进入"待办事项"或"我的待办"
  2. 查看待审批的流程列表
  3. 点击流程查看详情
  4. 填写审批意见(可选)
  5. 点击"同意"或"拒绝"

审批操作

  • 同意:审批通过,流程继续流转
  • 拒绝:根据配置,可能直接结束流程或退回到指定节点
  • 转交:将任务转交给其他人处理(如果流程支持)

4.3 发起历史

查看自己发起的所有流程及其状态。

可查看的信息

  • 流程名称和编号
  • 发起时间
  • 当前状态(审批中、已通过、已拒绝、已撤销)
  • 当前审批节点和审批人
  • 审批历史记录

可执行的操作

  • 查看流程详情
  • 查看审批记录
  • 撤销流程(如果流程支持且未完成)
  • 催办(提醒审批人尽快审批)

五、特殊操作

5.1 审批人:部门主管

配置步骤

步骤1:添加部门主管岗位

系统管理 > 岗位管理 > 添加岗位 > 添加部门主管 (DEPT_LEADER) 岗位

岗位配置

  • 岗位名称:部门主管
  • 岗位编码:DEPT_LEADER(必须使用此编码)
  • 岗位说明:部门负责人

步骤2:为用户分配部门主管岗位

系统管理 > 用户管理 > 添加用户 > 设置用户为对应部门、对应岗位(部门主管)

配置要点

  • 用户必须属于某个部门
  • 为该用户分配"部门主管"岗位
  • 一个部门可以有多个主管(多人会签)

注意事项

  • 确保部门层级关系配置正确
  • 每个部门至少配置一名部门主管
  • 跨部门流程需要特别注意主管的归属

5.2 审批人:连续多级主管

业务描述:流程会连续向上级主管流转,直到某个主管审批通过或拒绝。

使用场景

  • 灵活的逐级审批,无需固定层级
  • 金额分级审批(不同金额对应不同审批级别)
  • 权限分级审批

配置方式: 在审批人设置中选择"连续多级主管"

执行逻辑

  1. 从发起人的直接主管开始
  2. 如果该主管同意,流程继续
  3. 如果该主管拒绝,根据拒绝处理方式处理
  4. 如果该主管选择"上报",流转到其上级主管
  5. 重复此过程,直到有主管审批通过或拒绝

优点

  • 灵活的审批层级,不需要固定几级审批
  • 适应组织架构变化
  • 可以根据实际情况决定审批层级

六、进阶使用

6.1 业务侧发起流程

在实际业务场景中,您可能需要从自己的业务系统(如ERP、CRM等)中直接发起工作流,而不是通过PigX-OA的界面操作。这种情况下,您可以通过调用PigX-OA提供的API接口来实现流程的程序化发起。

@Autowire
RemoteFlowApiFlowService flowApiFlowService;

// 获取流程配置详情
ProcessInstanceParamDto processInstanceParamDto = new ProcessInstanceParamDto();
processInstanceParamDto.setFlowId(flowId);
processInstanceParamDto.setStartUserId(String.valueOf(user.getId()));

Map<String, Object> paramMap = new HashMap<>();
// 设置发起人
Dict rootUser = Dict.create()
.set("id", processInstanceParamDto.getStartUserId())
.set("name", user.getUsername())
.set("type", NodeUserTypeEnum.USER.getKey());
paramMap.put("root", CollUtil.newArrayList(rootUser));
processInstanceParamDto.setParamMap(paramMap);

flowService.startProcessInstance(processInstanceParamDto);

具体参考可以在协同办公里面 F12 具体看下提交流程发起需要的参数

6.2 节点任务通知

支持在节点对应任务完成后(审批通过、审批拒绝)往目标接口 POST JSON BODY推送消息。

通知数据字段

字段名类型描述
flowIdString流程id (process id)
processInstanceIdString流程实例id (process instance id)
dataString表单数据 (form data)
localDataString本地数据 (local data)
nodeIdString节点id (node id)
userIdLong用户id (user id)
executionIdString执行id (execution id)
taskIdString任务id (task id)
approveDescString审批描述 (approval description)
nodeNameString节点名称 (node name)
taskTypeString任务类型 (task type)

示例接收代码(Java):

// http://localhost:9999/test/webhook
@Inner(value = false)
@PostMapping("/webhook")
public R test(@RequestBody Map<String,Object> body) {
    // body 业务处理
    return R.ok("success");
}

使用场景

  • 审批完成后同步数据到其他系统
  • 审批完成后发送通知(邮件、短信、企业微信)
  • 审批完成后触发其他业务流程
  • 审批完成后更新业务数据状态

6.3 流程状态查询

在接收到节点任务通知后,您可能需要确认整个流程的状态(是否已完成或被拒绝)。这可以通过使用流程实例ID(processInstanceId)进行查询实现。系统提供了相应的API接口,允许您根据processInstanceId检索流程的当前状态、历史记录和相关详情。

API说明

  • 接口地址:通过流程实例ID查询流程状态
  • 返回信息:流程当前状态、当前节点、审批历史、表单数据等

流程状态字段说明

status - 流程状态:

  • 0 - 未提交:流程已创建但尚未提交
  • 1 - 进行中:流程正在审批流转中
  • 2 - 已完成:流程所有节点审批(拒绝/通过),正常结束

finish_reason - 流程完成原因:

  • 0 - 拒绝:流程被审批人拒绝
  • 1 - 通过:流程审批通过并完成
  • 9 - 自动终止:流程用户自动终止

6.4 表单设计器个性化

本项目表单设计器功能基于 form-create 开源版本,根据 form-create 开源协议允许商业化使用。

如果进阶使用或者个性需求,请参考官方文档和视频:

可定制内容

  • 自定义表单组件
  • 扩展表单验证规则
  • 自定义表单样式
  • 添加特殊业务逻辑

注意事项

  • 建议熟悉Vue 3和form-create框架后再进行定制
  • 定制内容需要前端开发支持
  • 升级系统版本时需要注意定制内容的兼容性